package hotel.switchs.oversea.online.service;

import hotel.base.oversea.dto.meituan.PushHotelBreakfastVo;
import hotel.base.oversea.service.BaseService;
import hotel.base.oversea.utils.Result;
import hotel.base.oversea.vo.meituan.MtHotelRoomDownVo;
import hotel.base.oversea.vo.meituan.request.goods.ProductFailureVo;
import hotel.switchs.oversea.api.VO.SwitchRoomPriceAndStatusVo;
import hotel.switchs.oversea.api.VO.request.GetRoomListVo;
import hotel.switchs.oversea.api.VO.request.ProductNewAddVo;
import hotel.switchs.oversea.api.dto.SwitchCreateRoomDto;
import hotel.switchs.oversea.api.dto.SwitchSaleRoomAboutIdsDto;
import hotel.switchs.oversea.api.entity.SwitchCreateRoomEntity;
import hotel.switchs.oversea.api.entity.SwitchHotelActiveTag;

import java.util.List;

/**
 * @Author lmf
 * @Date 2020/6/10 14:35
 **/
public interface SwitchCreateRoomService extends BaseService<SwitchCreateRoomEntity> {

    /**
     * 创建售卖房型
     * 根据子物理房型和子酒店id
     */
    Result<Object> createRoom(Integer hotelId, Integer basicRoomTypeId);

    /**
     * 根据售卖房型id 获取创建信息
     *
     * @param roomId
     * @return
     */
    SwitchCreateRoomDto selectOneDtoByRoomId(Integer roomId);

    /**
     * 分页获取，返回携程创建售卖房型对应的美团产品ids
     *
     * @param index
     * @param pageSize
     * @return
     */
    Result<Object> getMtIdsPageAboutSwitchSaleRoom(Integer index, Integer pageSize);

    /**
     * 根据售卖房型id 获取美团产品id
     */
    int getMtGoodIdByRoomId(int roomId);

    /**
     * <H1>根据售卖房型ID，获取美团产品信息</H1>
     *
     * @param parseInt
     * @return hotel.switchs.oversea.api.dto.SwitchCreateRoomDto
     * @author HuangT
     * @date 2020/7/11 14:05
     */
    SwitchCreateRoomDto getMtInfoBySwitchRoomId(int parseInt);

    SwitchCreateRoomDto selectOneDtoByMtGoodsId(Integer mtGoodsId, String mtHotelId);

    List<SwitchSaleRoomAboutIdsDto> selectDtosByMtHotelId(String mtHotelId);

    /**
     * @author: lmf
     * @date: 2020/8/21 17:29
     * 根据美团的酒店id 产品id 获取信息
     */
    SwitchCreateRoomEntity selectMtHotelAndMtGoodId(int mtHotelId, int mtGoodId);

    /**
     * <H1>获取酒店房型信息</H1>
     *
     * @param hotelIdArr 实体对象
     * @return java.util.List<hotel.switchs.oversea.api.VO.HotelRoomInfoVO>
     * @author HuangT
     * @Date 2020/9/10 17:25
     */
    List<SwitchHotelActiveTag> getHotelRoomInfo(int[] hotelIdArr);

    /**
     * @author: lmf
     * @date: 2020/9/14 13:53
     * 重新设置取消规则
     */
    Result<Object> setCancelRule();
    /**
     * @author: lmf
     * @date: 2020/9/15 11:37
     * 获取房型列表
     */
    Result<Object> getRoomList(GetRoomListVo getRoomListVo);
    /**
     * @author: lmf
     * @date: 2020/9/18 14:04
     * 售卖房型失效
     */
    Result<Object> loseRoom();
    /**
     *
     * @author: lmf
     * @time: 2020/10/19 18:16
     *  更新售卖房型餐食
     * @param pushHotelBreakfastVo
     */
    Result<Object> updateCreateRoomBreak(PushHotelBreakfastVo pushHotelBreakfastVo);
    /**
     *
     * @author: lmf
     * @time: 2020/10/28 11:31
     * 美团产品失效
     * @param productFailureVo
     */
    Result<Object> productFailure(ProductFailureVo productFailureVo);
    /**
     *
     * @author: lmf
     * @time: 2020/10/28 16:37
     * 美团新增产品
     * @param productNewAddVo
     */
    Result<Object> productNewAdd(ProductNewAddVo productNewAddVo);
    /**
     *
     * @author: lmf
     * @time: 2020/10/28 20:34
     * 更新售卖房型餐食
     */
    Result<Object> updateCreateRoomBreakAgein();

    /**
     * 美团房型失效接口
     * @param mtHotelRoomDownVo
     * @return
     */
    Result<Object> roomFailure(MtHotelRoomDownVo mtHotelRoomDownVo);

    /***
     * @Author: lmf
     * @Date: 2020/12/22
     * 携程产品相关联的缓存清空与设置
     */
    Result<Object>  managerCreateRoomCache(Integer mtHotel, String mtRoomId, Integer mtGoodId, Integer breakFast, Integer meanCount, Integer genre);

    /***
     * @Author: lmf
     * @Date: 2021/2/22
     * 设置售卖房型的标准价
     */
    Result<Object> setRoomPrice(Integer hotelId, Integer roomId, Integer price);
    /***
     * @Author: lmf
     * @Date: 2021/3/23
     * 获取酒店价格房态的数据
     */
    Result<Object> getRoomPriceAndStatusList(SwitchRoomPriceAndStatusVo switchRoomPriceAndStatusVo);
}
